﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Runtime.InteropServices;

namespace FamaWebSite.Models
{
    [StructLayout(LayoutKind.Sequential)]
    public class ParametrosModel
    {
        [Display(Name = "Atributos")]
        public string Atributos { get; set; }

        [Display(Name = "Arquivo para treino")]
        public string ArquivoInputTreino { get; set; }

        [Display(Name = "Arquivo a ser classificado")]
        public string ArquivoInputTeste { get; set; }

        [Display(Name = "Atributo analisado")]
        public int AtributoAnalisado { get; set; }

        [Display(Name = "Atributo classificado")]
        public int AtributoClassificado { get; set; }

        [Display(Name = "Novo atributo")]
        public int AtributoNovo { get; set; }

        [Display(Name = "Quantidade de dobras")]
        public int QuantidadeDeDobras { get; set; }

        [Display(Name = "Porcentagem de divisão")]
        public string PorcentagemDeDivisao { get; set; }

        [Display(Name = "Porcentagem de divisão")]
        public float PorcentagemDeDivisaoFloat { get; set; }

        [Display(Name = "Email")]
        public string Email { get; set; }

        [Display(Name = "Acurácia")]
        public List<float> Resposta { get; set; }

        [Display(Name = "Lista de arquivos")]
        public List<string> FilesList { get; set; }

        [Display(Name = "Algoritmo selecionado")]
        public string Algoritmo { get; set; }

        [Display(Name = "Validador")]
        public string Validador { get; set; }

        [Display(Name = "Parâmetros Extras")]
        public string ParametrosExtras { get; set; }

        public static explicit operator ParametrosMaisProvavel(ParametrosModel model)
        {
            return new ParametrosMaisProvavel
            {
                ATRBT_ANALISADO = 1, //model.AtributoAnalisado,
                ATRBT_CLASSIFICADO = 2, //model.AtributoAnalisado,
                ATRBT_NOVO = 3, //model.AtributoNovo,
                arquivoInputTeste = "C:/Users/Joilson/Desktop/FAMA/trunk/inputs/testX.txt", //model.ArquivoInputTeste,
                arquivoInputTreino = "C:/Users/Joilson/Desktop/FAMA/trunk/inputs/trainX.txt", //model.ArquivoInputTreino,
                atributo = "EMPTY",
                atributoASerTreinado = 1,
                atributos = "word,tpos,np", //model.Atributos,
                valorAtributo = "EMPTY",
                validador = model.Validador,
                porcentagem = (model.PorcentagemDeDivisao != null && model.PorcentagemDeDivisaoFloat != 0) ? model.PorcentagemDeDivisaoFloat : 
                                                                                                                float.Parse("0,80"),
                qntDobras = (model.QuantidadeDeDobras != 0) ? model.QuantidadeDeDobras : 2,
                parametrosExtras = model.ParametrosExtras
            };
        }
    }
}